package com.hst.capacity.application.biz;

import com.hst.capacity.domain.model.entity.order.express.ExpressOrderEntity;
import com.hst.capacity.domain.model.request.OrderParam;
import com.hst.capacity.domain.model.request.dispatch.DispatchDriverParam;
import com.hst.capacity.domain.model.request.dispatch.DispatchParam;
import com.hst.capacity.domain.model.request.dispatcher.DispatcherSearchOrderParam;
import com.hst.capacity.domain.model.request.express.*;
import com.hst.capacity.domain.model.request.price.*;
import com.hst.capacity.domain.model.response.PagingResultVO;
import com.hst.capacity.domain.model.response.express.*;
import com.hst.capacity.domain.model.response.order.ExOrderInfoVO;
import com.hst.capacity.domain.model.response.order.OrderPriceVO;
import com.hst.capacity.domain.model.response.order.OrderVO;

import java.util.List;

public interface ExpressOrderBiz {

    OrderVO refresh(OrderParam param);

    PagingResultVO<ExpressOrderEntity> findExOrderListByUserMobile(ExListUserParam param);
    PagingResultVO<ExpressOrderEntity> findExOrderListByRegionCode(ExListRegionParam param);
    //ExpressOrderPriceRespVO getExpressCommonPrice(ExpressPriceParam expressPriceParam);
    PagingResultVO<ExListNewVO> getNewExOrderList(ExListNewParam param);

    PagingResultVO<ExListNewVO> getNewExOrderListByRegionCode(ExListNewParam param);

    OrderPriceVO getExpressStpPrice(ExpressPriceParam param);
    OrderPriceVO getContrysidePrice(ContrySidePriceParam param);
    ExpressOrderEntity saveExpressStpOrder(ExpressCreateOrderParam param);
    ExpressOrderEntity createExpressStpOrder(ExpressCreateOrderParam param);
    ExpressOrderEntity updateExpressStpOrder(ExpressCreateOrderParam param);

    Boolean reCalculatePrice(ExpressRePriceParam param);
    Boolean reDispatchDriver(DispatchDriverParam param);
    Boolean dispatchDriver(DispatchDriverParam param);
    Boolean unDispatchDriver(DispatchDriverParam param);
    Boolean cancelOrder(String idOrder,String operator);

    OrderVO virtualAcceptOrder(String idOrder, String idDriver);
    OrderVO virtualAcceptOrder(DispatchParam param);

    PagingResultVO<ExSearchVO> exOrderSearch(ExListParam param,Boolean forHistory);

    ExDetailVO exOrderDetail(String idOrder,Boolean forHistory);

    Boolean exOrderDestroy(ExOrderDestroyParam param);

    Boolean exReMemo(String idOrder, String memo);

    List<ExpressOrderEntity> findByIdDriverAndStatus(String idDriver, Integer status);

    ExOrderBillInfoVO getOrderBillInfo(String idOrder,Boolean forHistory);

    PagingResultVO<ExOrderSettlementViewVO> exOrderBillViewLst(ExSettlementViewListParam param);

    ExOrderInfoVO orderInfo(String idOrder);

    OrderPriceVO getExpressPrice(PriceParam param);

    ExpressOrderEntity createExpressOrder(ExpressCreateOrderParam param);

    PagingResultVO<ExSearchVO> dispatherExOrderSearch(DispatcherSearchOrderParam param, Boolean forHistory);

}
